package com.spsa.vista.controladores;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import org.primefaces.context.RequestContext;
import org.primefaces.event.SelectEvent;

import com.spsa.excepciones.ServicioException;
import com.spsa.negocio.gestores.GestorDestinatario;
import com.spsa.negocio.utilidades.SingletonDatos;
import com.spsa.persistencia.entidades.Destinatario;
import com.spsa.vista.utilidades.MensajesJSF;

@ManagedBean(name = "backDestinatarios")
@ViewScoped
public class ControladorDestinatarios {

	@EJB
	private SingletonDatos singletonDatos;
	@EJB
	private GestorDestinatario gestorDestinatario;
	private List<Destinatario> destinatarios;
	private Destinatario destinatarioActual;
	
	@PostConstruct
	public void inicializar() {
		destinatarios = singletonDatos.getDestinatarios();
	}

	public void abrirDialogoRegistrar() {
		abrirDialogo(null);
	}
	
	private void abrirDialogo(Destinatario destinatario) {
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("destinatario", destinatario);

		Map<String, Object> options = new HashMap<String, Object>();
		options.put("modal", true);
		options.put("draggable", false);
		options.put("resizable", false);
		options.put("closable", false);
		options.put("contentHeight", 120);
		options.put("contentWidth", 350);
		RequestContext.getCurrentInstance().openDialog("crudDestinatarios", options, null);
	}

	public void registrarDestinatario(SelectEvent event) {
		if (event.getObject() == null)
			return;

		Destinatario destinatario = (Destinatario) event.getObject();
		
		try {
			gestorDestinatario.registrar(destinatario);
			actualizarListaDestinatarios();
			MensajesJSF.mostrarMensaje("Registrar Destinatario", "Se registro el Destinatario");
		} catch (ServicioException e) {
			MensajesJSF.mostrarError("Registrar Destinatario", e.getMessage());
		}
	}
	
	public void abrirDialogoModificar(Destinatario destinatario) {
		abrirDialogo(destinatario);
	}
	
	public void modificarDestinatario(SelectEvent event) {
		if (event.getObject() == null)
			return;

		Destinatario destinatario = (Destinatario) event.getObject();
		
		try {
			gestorDestinatario.actualizar(destinatario);
			actualizarListaDestinatarios();
			MensajesJSF.mostrarMensaje("Registrar Destinatario", "Se registro el Destinatario");
		} catch (ServicioException e) {
			MensajesJSF.mostrarError("Registrar Destinatario", e.getMessage());
		}
	}
	
	public void eliminarDestinatario() {
		try {
			gestorDestinatario.eliminar(destinatarioActual);
			actualizarListaDestinatarios();
			MensajesJSF.mostrarMensaje("Eliminar Destinatario", "Se elimino el Destinatario");
		} catch (ServicioException e) {
			MensajesJSF.mostrarError("Eliminar Destinatario", e.getMessage());
		}
	}
	
	private void actualizarListaDestinatarios() {
		destinatarios = singletonDatos.getDestinatarios();
	}

	public List<Destinatario> getDestinatarios() {
		return destinatarios;
	}

	public void setDestinatarios(List<Destinatario> destinatarios) {
		this.destinatarios = destinatarios;
	}

	public Destinatario getDestinatarioActual() {
		return destinatarioActual;
	}

	public void setDestinatarioActual(Destinatario destinatarioActual) {
		this.destinatarioActual = destinatarioActual;
	}
}
